home *** CD-ROM | disk | FTP | other *** search
/ Freelog 125 / Freelog_MarsAvril2015_No125.iso / ViePratique / gnucash / gnucash-2.6.5-setup.exe / {app} / share / ktoblzcheck / online_update.pl < prev   
Perl Script  |  2014-12-19  |  7KB  |  185 lines

  1. #!/c/gcdev/gnucash-2.6.5a/mingw/msys/1.0/bin/perl
  2.  
  3. # Simply run this script with no arguments. It will first download the
  4. # information HTML page by bundesbank and parse this page for blz
  5. # updates. Then, the user will be asked whether one particular
  6. # available file should be downloaded. If the user agrees, the file is
  7. # downloaded, copied into BANKDATA_PATH, and converted into
  8. # ktoblzcheck's format.
  9.  
  10. ## Configuration
  11. # Commands
  12. $WGET = "/c/gcdev/gnucash-2.6.5a/mingw/msys/1.0/bin/wget";
  13. $LYNX = "NO";
  14. #$SED = "/c/gcdev/gnucash-2.6.5a/mingw/msys/1.0/bin/sed";
  15. $GREP = "/c/gcdev/gnucash-2.6.5a/mingw/msys/1.0/bin/grep";
  16. $RECODE = "NO"; #"NO"; -- dont use recode, it is not widely available
  17. # Directories
  18. $prefix="/c/gcdev/gnucash-2.6.5a/gwenhywfar";
  19. $datadir="${prefix}/share";
  20. $pkgdatadir="$datadir/ktoblzcheck";
  21. $BANKDATADIR="${pkgdatadir}";
  22.  
  23. ## Sanity checks
  24. die "Neither wget nor lynx is available on your system, or was available on the system where the installed rpm was built. This tool requires wget or lynx. If you have it i
  25. nstalled, then edit the script and set the variable WGET or LYNX to the full path to wget or lynx. Aborting for now."
  26.   if $WGET eq "NO" and $LYNX eq "NO";
  27. #die "sed or grep is not available on your system. This tool requires it. Aborting."
  28. #  if $SED eq "NO" || $GREP eq "NO";
  29. die "The directory for the bankdata \"$BANKDATADIR\" does not exist. Aborting."
  30.   if ! -d $BANKDATADIR;
  31. die "The directory for the bankdata \"$BANKDATADIR\" is not writable. You need to run this script as the user who owns that directory. This probably means you must run this script as root! However this script will not write anything anywhere until it tells you so and you confirm it."
  32.   if ! -w $BANKDATADIR;
  33. #print "The recode program is not available. This is okay as long as your system default encoding is latin1/ISO-8859-1 or similar. However if your system default encoding is UTF-8 then the conversion of the downloaded file will fail. In that case please cancel now, edit this script and set the variable RECODE to the full path to recode.\n"
  34. #  if $RECODE eq "NO";
  35.  
  36. ## Common constants
  37. $debug=0; # set this to nonzero for activating debugging mode
  38. $BASE_URL="http://www.bundesbank.de";
  39. $MAIN_URL="$BASE_URL";
  40. $MAIN_DOC="$MAIN_URL/Redaktion/DE/Standardartikel/Kerngeschaeftsfelder/Unbarer_Zahlungsverkehr/bankleitzahlen_download.html";
  41.  
  42. if ($debug == 0) {
  43.   if ($WGET ne "NO") {
  44.     $DOWNLOADCMD = "$WGET -O - $MAIN_DOC";
  45.   } else {
  46.     $DOWNLOADCMD = "$LYNX -source $MAIN_DOC";
  47.   }
  48. } else {
  49.   print "DEBUG MODE! Will only echo commands, not execute them.\n";
  50.   $DOWNLOADCMD = "cat ~/privat/hbci/blabla.html";
  51. }
  52. # Old regexp before 2006-06-04
  53. #$datafile_regexp = 'blz\d{4,8}?pc\.txt';
  54. # Regexp from 2006-06-05 onwards
  55. #$datafile_regexp = 'blz_\d{8}\.txt';
  56. # New regexp from 2012-05-30 onwards
  57. $datafile_regexp = 'blz_\d{4}_\d{2}_\d{2}_txt\.txt';
  58.  
  59. ## Find the available potential download files
  60. @potential_files = ();
  61. @potential_urls = ();
  62. open(INPUT, "$DOWNLOADCMD |") || die "can't open $DOWNLOADCMD: $!";;
  63. while (<INPUT>) {
  64.   my ($addr) = m|($datafile_regexp)|giosx;
  65.   if ($addr) {
  66.     push @potential_files, $addr;
  67.     push @potential_urls, $_;
  68.   };
  69. };
  70. close INPUT;
  71. #print join("\n",@potential_files);print "\n";
  72.  
  73. ## Find the already installed files
  74. opendir(DIR, $BANKDATADIR) || die "can't opendir $BANKDATADIR: $!";
  75. @datafiles = grep( /$datafile_regexp/ && -f "$BANKDATADIR/$_", readdir(DIR));
  76. closedir DIR;
  77. #print join("\n",@datafiles);print "\n";
  78.  
  79. ## Calculate the difference between both lists
  80. @diff = ();
  81. %union = ();
  82. foreach $e (@datafiles) { $union{$e} = 1 }
  83. foreach $e (@potential_files) {
  84.     if ( !$union{$e} ) { 
  85.       push @diff, $e; 
  86.     }
  87. }
  88. #print join("\n",@diff);print "\n";
  89. #@diff = @potential_files;
  90.  
  91. ## Select the correct file to download
  92. if (scalar @diff == 0) {
  93.   print "Sorry, no new bankdata file found. Probably none available. Exiting.\n";
  94.   exit 0;
  95. } elsif (scalar @diff == 1) {
  96.   $file = $diff[0];
  97. } else {
  98.   print "The following bankdata files are available for download: \n";
  99.   $k = 0;
  100.   foreach $e (@diff) { print " [".$k++."] ".$e."\n"; };
  101.   print "Which one should be chosen? (Hint: The file names contain \n".
  102.     "the four-digit year, the month and the date as YYYY_MM_DD. You should \n".
  103.       "probably choose the file that corresponds to a date that \n".
  104.     "lies in the future.) \n".
  105.       "Please type the corresponding number and press Enter.\n";
  106.   $key = <STDIN>;
  107.   #print "Got $key which gives ".$diff[$key];
  108.   $file = $diff[$key];
  109. };
  110.  
  111. ## Pick the URL for downloading the file
  112. ($correct_url_line) = grep (m|$file|, @potential_urls);
  113. ($correct_url) = ($correct_url_line =~ m|([^"]*$file[^"]*)|gio);
  114.  
  115. # The installation name is now taken from the original filename;
  116. # "blz_20110102" will be installed after conversion as
  117. # "bankdata_20110102".
  118. $INSTALLED_NAME = $file;
  119. $INSTALLED_NAME =~ s/blz_(\d{4})_(\d{2})_(\d{2})_txt\.txt/bankdata_\1\2\3.txt/gio;
  120.  
  121. $download = "$MAIN_URL/$correct_url";
  122. $install_1 = "$BANKDATADIR/$file";
  123. $install_2 = "$BANKDATADIR/$INSTALLED_NAME";
  124. $conv_script = "$pkgdatadir/bundesbank.pl";
  125. print "Summary: Will download \n".
  126.   "  $download \n".
  127.   "to \n".
  128.   "  $install_1 \n".
  129.   "and convert it into ktoblzcheck's format at \n".
  130.   "  $install_2 \n".
  131.   "Is this ok? Please press <Enter> if yes, or <Control-C> to abort:\n";
  132. $key = <STDIN>;
  133.  
  134. if ($debug == 0) {
  135.   $ECHO = "";
  136.   $gt = ">";
  137.   $lt = "<";
  138. } else {
  139.   $ECHO = "echo";
  140.   $gt = "gt";
  141.   $lt = "lt";
  142. }
  143.  
  144. ## Now the real work:
  145. ##
  146. ## 1. Download
  147. if ($WGET ne "NO") {
  148.   print "$ECHO $WGET -O $install_1 $download\n";
  149.   system("$ECHO $WGET -O $install_1 $download");
  150. } else {
  151.   print "$ECHO $LYNX -source $download $gt $install_1\n";
  152.   system("$ECHO $LYNX -source $download $gt $install_1");# || die "can't call system: $!";
  153. }
  154.  
  155. ## 2. Check whether the Bundesbank's BLZ is in there
  156. print "$GREP -q 10000000 $install_1\n";
  157. if (system("$GREP -q 10000000 $install_1") != 0) {
  158.   die "Downloaded file $install_1 is not in valid BLZ format. Aborting.";
  159. }
  160.  
  161. ### 3. Backup copy of old bankdata file
  162. #print "$ECHO cp $install_2 $install_2~\n";
  163. #system("$ECHO cp $install_2 $install_2~");# || die "can't call system: $!";
  164. # - no backup needed anymore because all files have different dates in the name
  165.  
  166. ## 4. Recode the downloaded file from its latin1 encoding into the
  167. ## locale encoding
  168. if ($RECODE ne "NO") {
  169.   print "$ECHO $RECODE latin1.. $install_1\n";
  170.   system("$ECHO $RECODE latin1.. $install_1\n");
  171. };
  172.  
  173. ## 5. Convert new file into the place of the old one.
  174. print "$ECHO $conv_script $lt $install_1 $gt $install_2\n";
  175. system("$ECHO $conv_script $lt $install_1 $gt $install_2");# || die "can't call system: $!";
  176.  
  177. ## 6. Recode the locally encoded file into this library's
  178. ## encoding (latin1 for now)
  179. if ($RECODE ne "NO") {
  180.   print "$ECHO $RECODE ..latin1 $install_2\n";
  181.   system("$ECHO $RECODE ..latin1 $install_2\n");
  182. };
  183.  
  184. print "Finished.\n";
  185.